/*Copyright (C) 2009 - 2011 MASSART GAUTHIER

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include "../headers.h"

#define TAILLE_MAX 1000

void excit_jeu(void) {
	short continuer = 0;
	char *contenu_titre = "EXCIT";

	clear();
	afficher_titre(contenu_titre);
	get_player_name(0, prenom);


	while(continuer != 2) {
		char matrice[1000] = {'7', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '9',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|',
													'1', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '3',
												 };
		char nom_niveau[50], nom_auteur[100], filename[300] = {0};
		int Quitter, Direction = 0, Mouvement, position_joueur, temps_ms = 0, dernier_temps;
		short touche_appuyee = 0, choix = 0, choix2 = 0, i, vitesse = 25, niveau = 0, nombre_niveau = 0;
		Quitter = 1;

		clear();
		choix2 = afficher_menu("Niveaux officiels\nNiveaux personnels\nRetour\n", "Sélectionnez votre niveau : \n", contenu_titre);

		if(choix2 == 1) {
			sprintf(filename, "niveaux/excit_officiels.lvl");
		}
		else if(choix2 == 2) {
			clear();
			choose_pack("Excit", filename);

			if(fichier_existe(filename) == false) {
				if(filename[0] == 0) {
					sprintf(filename, "niveaux/excit_officiels.lvl");
				}
				else {
					CSLP_ColorText(COL_ERREUR);
					addstr("\n Erreur : Impossible d'ouvrir le pack de niveau.");
					getch();
				}
			}
		}
		else if(choix2 == 3) {
			Quitter = 0;
		}

		clear();
		dernier_temps = get_time_ms(); //Initialise le temps
		afficher_titre(contenu_titre);
		excit_afficher_infos();
		nombre_niveau = excit_charger_niveau(niveau, filename, matrice, nom_niveau, nom_auteur, &position_joueur);
		niveau++;

		while(Quitter == 1) {
			temps_ms += get_dif_time_ms(&dernier_temps);
			excit_affichage_mat(matrice, nom_niveau, nom_auteur, temps_ms, niveau, nombre_niveau);
			refresh();
			CSLP_Sleep(vitesse);

			if(CSLP_PollChar()) {
				i = position_joueur + Direction;

				if(matrice[i] != ' ') {
					touche_appuyee = getch();
				}
				else {
					getch();
				}
			}

			if(touche_appuyee != '0') {
				Direction = determiner_direction(touche_appuyee);
				i = position_joueur + Direction;
				Mouvement = type_mvt_excit(matrice[i]);

				if(Mouvement != 0) {
					if(Mouvement == 1) {
						matrice[position_joueur] = ' ';
						matrice[position_joueur + Direction] = 'J';
						position_joueur = i;
					}

					if(Mouvement == 2) {
						clear();
						afficher_titre(contenu_titre);
						excit_afficher_infos();
						excit_charger_niveau(niveau - 1, filename, matrice, nom_niveau, nom_auteur, &position_joueur);
						Direction = 0, touche_appuyee = 0;
					}

					if(Mouvement == 3) {
						clear();
						matrice[position_joueur] = ' ';

						if(nombre_niveau == niveau) {
							Quitter = 0;
						}
						else {
							afficher_titre(contenu_titre);
							excit_afficher_infos();
							excit_charger_niveau(niveau, filename, matrice, nom_niveau, nom_auteur, &position_joueur);
							niveau++;
							Direction = 0, touche_appuyee = 0;
						}
					}
				}
			}
			else {
				clear();
				choix = afficher_menu("Oui\nNon\n", "Voulez-vous quitter la partie en cours ?\n", "____─'PAUSE'─____");
				CSLP_ColorText(CT);
				clear();

				if(choix == 1) {
					Quitter = 0;
					clear();
				}
				else {
					clear();
					afficher_titre(contenu_titre);
					excit_afficher_infos();
					refresh();
					touche_appuyee = 0;
				}

				dernier_temps = get_time_ms(); //Egalise le dernier temps avec le temps actuel
			}
		}

		if(choix2 != 3) {
			if(nombre_niveau == niveau) {
				gagner();
			}

			afficher_titre(contenu_titre);
			excit_afficher_infos();
			excit_affichage_mat(matrice, nom_niveau, nom_auteur, temps_ms, niveau, nombre_niveau);
			move(30, 0);
			afficher_centre("FINI!");
			refresh();

			afficher_temps(32, 'm', 1, 2500);

			clear();

			afficher_titre(contenu_titre);

			if(choix != 1) {
				save_score("Excit", temps_ms, vitesse, filename);
				clear();
				afficher_titre(contenu_titre);
				lire_suppr_score("Excit", true);
				refresh();
				getch();
			}
		}

		clear();
		continuer = afficher_menu_recommencer(contenu_titre);
		CSLP_ColorText(CT);
	}
}

